React Component 只能透過資料狀態的改變來更新畫面,而 React 元件有兩種資料來源:
當 Props 或 State 改變時才會更新畫面。
舉個簡單的例子:
在 App.js 將 name 屬性傳遞給 Welcome.js 做使用
// App.js
import Welcome from "./Welcome";
function App() {
return (
<Welcome name="Mary"/>
);
}
export default App;
Welcome.js 接收 props
// Welcome.js
import React from 'react'
const Welcome = (props) => {
return (
<h1>Hello, {props.name}</h1>
)
}
export default Welcome
或者也可以解構賦值來接收 props,直接將要傳遞的屬性名稱放入參數裡面,這樣的做法就不用每次都一直寫 props 了,也可以比較清楚知道是什麼資料被傳進去
// Welcome.js
import React from 'react'
const Welcome = ({ name }) => {
return (
<h1>Hello, { name }</h1>
)
}
export default Welcome
若使用 class component,則要將 render() 內的 props 替換成 this.props:
// Welcome.js
import React, { Component } from 'react';
class Welcome extends Component {
render() {
return <h1>Hello, {this.props.name}</h1>;
}
}
export default Welcome
無論是使用 function component 或是 class component 最終結果都相同,網頁上都會顯示 Hello, Mary
例如:
import React, { Component } from "react";
class ClassState extends Component {
constructor() {
// super 呼叫 component 的 constructor
super();
// count 的初始值設為 0
this.state = { count: 0 };
}
render() {
return (
<div>
<h3>Class component - state</h3>
<p>You clicked {this.state.count} times</p>
<button
onClick={() => {
// 利用 setState 改變狀態,使 component 重新 render
this.setState({ count: this.state.count + 1 });
}}
>
Click
</button>
</div>
);
}
}
export default ClassState;
上面的例子因為 constructor() 內 count 初始值設為 0,打開網頁會看到畫面如下:
利用 this.setState() 改變狀態時,點擊按鈕時畫面就會更新,點擊幾次畫面就會被更新幾次,下圖為點擊按鈕 10 次後的畫面,被點擊的次數變成 10。
參考資料:
https://www.fooish.com/reactjs/state.html